package com.wy.project.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.util.Date;
import java.io.Serializable;
import java.util.List;

/**
 * @Author: wysk.
 * @Date: 2021/1/25
 * @Description:  产品信息
 **/
@Data
@Entity
public class ProductInfo implements Serializable {

    /**
     * 主键自增
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(columnDefinition = "int(11) comment'主键自增'")
    private Integer id;

    /**
     * 业务标识
     */
    @TableId(type = IdType.ASSIGN_ID)
    @TableField(fill = FieldFill.INSERT)
    @Column(columnDefinition = "varchar(40) comment'业务标识'")
    private String code;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(columnDefinition = "timestamp comment'创建时间'")
    private Date createTime;

    /**
     * 修改时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(columnDefinition = "timestamp comment'修改时间'")
    private Date updateTime;

    /**
     * 是否删除:  1:删除  2:未删除
     */
    @Column(columnDefinition = "smallint(2) comment'是否删除: 1:删除 2:未删除'")
    private Integer isDelete;

    /**
     * 代号名称
     */
    @Column(columnDefinition = "varchar(40) comment'代号名称'")
    private String codeName;

    /**
     * 产品名称
     */
    @Column(columnDefinition = "varchar(40) comment'产品名称'")
    private String name;

    /**
     * 行业类型的ID
     */
    @Column(columnDefinition = "int(11) comment'行业类型的ID'")
    private Integer dicIndustryId;

    /**
     * 产品信息类型的ID
     */
    @Column(columnDefinition = "int(11) comment'产品信息类型的ID'")
    private Integer dicProductInfoTypeId;

    /**
     * 介绍
     */
    @Column(columnDefinition = "varchar(255) comment'产品介绍'")
    private String des;


    /**
     * 产品基本信息的状态  1:草稿  2:待审核  3:审核成功  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:作废  9:发布
     */
    @Column(columnDefinition = "int(11) comment'产品基本信息的状态:  1:草稿 2:待审核 3:审核成功 4:审核失败 5:变更中 6:变更成功 7:变更失败 8:作废 9:发布'")
    private Integer status;

    /**
     * 产品业务流程的状态  0:未添加 1:草稿  2:待审核  3:审核成功  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:作废
     */
    @Column(columnDefinition = "int(11) comment'产品业务流程的状态:  0:未添加 1:草稿 2:待审核 3:审核成功 4:审核失败 5:变更中 6:变更成功 7:变更失败 8:作废'")
    private Integer bizFlowStatus;

    /**
     * 产品功能需求的状态 0:未添加 1:草稿  2:待审核  3:审核成功  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:作废
     */
    @Column(columnDefinition = "int(11) comment'产品功能需求的状态:  0:未添加 1:草稿 2:待审核 3:审核成功 4:审核失败 5:变更中 6:变更成功 7:变更失败 8:作废'")
    private Integer pdInfoReqsStatus;


    /**
     * 版本号
     */
    @Column(columnDefinition = "int(11) comment'版本号'")
    private Integer version;


    /**
     * 终端类型
     */
    @TableField(exist = false)
    @Transient
    private List<ProductInfoTerminalType> productInfoTerminalTypes;


    /**
     * 业务流程信息
     */
    @TableField(exist = false)
    @Transient
    private List<ProductInfoBizFlowInfo> productInfoBizFlowInfos;

    /**
     * 功能需求模块信息
     */
    @TableField(exist = false)
    @Transient
    private List<PdInfoReqsModule> pdInfoReqsModules;


    /**
     * 常量类型
     */
    public static class Status{

        /**
         * 未添加
         */
        public static final Integer STATUS_NOT_ADD = 0;

        /**
         * 草稿
         */
        public static final Integer STATUS_DRAFT = 1;

        /**
         * 待审核
         */
        public static final Integer STATUS_WAIT_APPROVAL = 2;

        /**
         * 审核成功
         */
        public static final Integer STATUS_APPROVAL_PASS = 3;

        /**
         * 审核失败
         */
        public static final Integer STATUS_APPROVAL_FAIL = 4;

        /**
         * 待修订
         */
        public static final Integer STATUS_REVISION_WAIT_APPROVAL = 5;

        /**
         * 修订成功
         */
        public static final Integer STATUS_REVISION_PASS = 6;

        /**
         * 修订失败
         */
        public static final Integer STATUS_REVISION_NOT_PASS = 7;

        /**
         * 作废
         */
        public static final Integer STATUS_ABORT = 8;

        /**
         * 发布
         */
        public static final Integer STATUS_PUBLISH = 9;

        /**
         * 待变更
         */
        public static final Integer STATUS_CHANGE_WAIT_APPROVAL = 10;

        /**
         * 变更成功
         */
        public static final Integer STATUS_CHANGE_PASS = 11;

        /**
         * 变更失败
         */
        public static final Integer STATUS_CHANGE_NOT_PASS = 12;
    }


}
